package cn.com.anypay.manager.miaoma.student.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.ToString;

import java.time.LocalDate;

/**
 * 学生查询条件DTO
 * 用于封装复杂的查询条件
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
public class StudentQueryDTO {

    /**
     * 姓名关键词（模糊查询）
     */
    private String nameKeyword;

    /**
     * 学号关键词（模糊查询）
     */
    private String studentNoKeyword;

    /**
     * 性别筛选
     */
    private Integer gender;

    /**
     * 年龄范围查询
     */
    private Integer minAge;
    private Integer maxAge;

    /**
     * 班级名称（精确匹配）
     */
    private String className;

    /**
     * 班级关键词（模糊查询）
     */
    private String classKeyword;

    /**
     * 入学日期范围
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate enrollDateStart;

    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate enrollDateEnd;

    /**
     * 出生日期范围
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate birthDateStart;

    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate birthDateEnd;

    /**
     * 状态筛选
     */
    private Integer status;

    /**
     * 是否成年筛选
     */
    private Boolean isAdult;

    /**
     * 创建时间范围
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDate createdTimeStart;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDate createdTimeEnd;

    /**
     * 排序字段
     */
    private String sortField;

    /**
     * 排序方向 (asc/desc)
     */
    private String sortDirection;

    /**
     * 检查是否有任何查询条件
     */
    public boolean hasAnyCondition() {
        return nameKeyword != null || studentNoKeyword != null ||
               gender != null || minAge != null || maxAge != null ||
               className != null || classKeyword != null ||
               enrollDateStart != null || enrollDateEnd != null ||
               birthDateStart != null || birthDateEnd != null ||
               status != null || isAdult != null ||
               createdTimeStart != null || createdTimeEnd != null;
    }
}